package br.ufpb.di.ppgi.negocio.servicos;

import java.util.List;

import br.com.caelum.vraptor.ioc.Component;
import br.ufpb.di.ppgi.negocio.iservicos.IProfessorExternoService;
import br.ufpb.di.ppgi.negocio.modelo.professorExterno.ProfessorExterno;
import br.ufpb.di.ppgi.persistencia.QueryLocator;
import br.ufpb.di.ppgi.persistencia.domainstore.DomainStore;
import br.ufpb.di.ppgi.persistencia.iquery.IProfessorExternoQuery;
import br.ufpb.di.ppgi.persistencia.pagination.ListaPaginada;

@Component
public class ProfessorExternoService implements IProfessorExternoService {

	private final IProfessorExternoQuery professorExternoQuery;
	private final DomainStore ds;
	
	public ProfessorExternoService(QueryLocator queries, DomainStore ds) {
		this.professorExternoQuery = queries.forProfessorExterno();
		this.ds = ds;
	}

	@Override
	public void adicionar(ProfessorExterno professorExterno) {
		ds.add(professorExterno);

	}

	@Override
	public ProfessorExterno apagar(Long id) {
		return ds.remove(ProfessorExterno.class,id);
	}

	@Override
	public ProfessorExterno atualizar(ProfessorExterno professorExterno) {
		return ds.merge(professorExterno);
	}

	@Override
	public ProfessorExterno buscar(Long id) {
		return professorExternoQuery.get(id);
	}

	@Override
	public List<ProfessorExterno> listar() {
		return professorExternoQuery.listAll();
	}

	@Override
	public ListaPaginada<ProfessorExterno> filtrarPaginando(String key, Integer page, String base) {
		return professorExternoQuery.paginarByKey(key)
			.query(10, page)
			.setBase(base)
			.toVersaoEmPortugues();
	}

	@Override
	public boolean cpfJaExiste(String cpf) {
		return professorExternoQuery.cpfExists(cpf);
	}

	@Override
	public ProfessorExterno findByCPF(String cpf) {
		return professorExternoQuery.findByCPF(cpf);
	}
	
	

}
